import pandas as pd
import numpy as np

# 读取当前目录下的指定文件
file_path = 'file:///D:\python-ml-learn\实验2boss数据/aa.xlsx'
df = pd.read_excel(file_path)
print("发现异常数据：")
df = df.dropna(subset=['关键词', '薪水'])

# 打印前几行以查看数据
print(df.head())

# 去除“薪水”列中包含“元/天”的数据, 清洗
df = df[~df['薪水'].str.contains('元/天|元/时|元/周|元/月', na=False)]
df = df[~df['薪水'].str.contains('面议', na=False)]
# 打印处理后的数据前几行
print(df.head())

# 转置数据
# # 处理“薪水”列，去除“K”并计算平均值乘以13
def process_salary(salary):
    if isinstance(salary, str) and salary.endswith('K'):
        # 去除“K”
        salary = salary[:-1]
        # 按“-”分割
        parts = salary.split('-')
        if len(parts) == 2:
            try:
                # 计算平均值并乘以13
                return (float(parts[0]) + float(parts[1])) / 2 * 13 * 1000
            except ValueError:
                return salary
    return salary

# 应用处理函数到“薪水”列
df['薪水'] = df['薪水'].apply(process_salary)

# 打印处理后的数据前几行
print(df.head())

# 假设前面已经对“薪水”列进行了初步处理，现在再次检查并确保所有以“K”结尾的数据都处理成平均值乘以13
def fun0(salary):
    if isinstance(salary, str) and salary.endswith('K'):
        # 再次处理以“K”结尾的数据
        salary = salary[:-1]
        parts = salary.split('-')
        if len(parts) == 2:
            try:
                return (float(parts[0]) + float(parts[1])) / 2 * 13 * 1000
            except ValueError:
                return salary
        else:
            return salary    
    elif isinstance(salary, str) and '·' in salary:
        try:
            # 如果包含· 按照·分割，取第二个值再去掉’薪‘
            #  多少个月
            nmonth = salary.split('·')[1].replace('薪', '')
            
            tmp0 = salary.split('·')[0]
            # 再次处理以“K”结尾的数据
            tmp1 = tmp0[:-1]
            parts = tmp1.split('-')
            return (float(parts[0]) + float(parts[1])) / 2 * int(nmonth) * 1000
        except ValueError:
            return salary
    else:
        return salary
    return salary

df['薪水'] = df['薪水'].apply(fun0)


# 打印最终处理后的数据前几行
print(df.head())

def fun1(x):
    if isinstance(x, str) and x.find('1-3年') != -1:
         return '1-3年'
    elif isinstance(x, str) and x.find('3-5年') != -1:
        return '3-5年'
    elif isinstance(x, str) and x.find('5-10年') != -1:
        return '5-10年'
    elif isinstance(x, str) and x.find('10年以上') != -1:
        return '10年以上'
    else:
        return '其他'

# 按照关键词分组jin对数据进行分组，并计算平均值
df['关键词x'] = df['关键词'].apply(fun1)
print(df.head(10))
# def final_clean(salary):
#     try:
#         return float(salary)
#     except:
#         print(salary)
#         return np.nan
df['薪水'] = df['薪水'].apply(lambda x: float(x)).astype(float)
dfn1 = df.groupby('关键词x')['薪水'].mean()
# 中位数
dfn2 = df.groupby('关键词x')['薪水'].median()
# 汇总
print(dfn1)
print(dfn2)

